package reflect;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 注解的声明使用关键字 @interface
 *
 * 声明一个注解后，通常会使用java内置的两个注解来说明当前注解的一些特征:
 * @Retention注解用于声明我们定义的注解的保留级别
 *  有三个可选值：
 *      RetentionPolicy.SOURCE  仅保留在源代码中，编译后的class文件中没有该注解
 *      RetentionPolicy.CLASS   注解保留在字节码文件中，但是反射机制不能使用它
 *      RetentionPolicy.RUNTIME 注解保留在字节码文件中，并且可以被反射机制调用
 *      @Retention不指定时，默认级别为CLASS
 *
 * @Target注解用于声明我们定义的注解可以在哪里被标注
 *   对应的可选值有很多，都在ElementType上有所定义
 *   例如:
 *   ElementType.TYPE  在类上可以使用当前注解
 *   ElementType.METHOD 在方法上可以使用当前注解
 *   ....
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface AutoRunClass {
}
